//
//  HMUserAccountViewModel.swift
//  Weibo
//
//  Created by teacher on 2017/6/7.
//  Copyright © 2017年 teacher. All rights reserved.
//

import UIKit
//  封装OAuth登录网络请求
class HMUserAccountViewModel: NSObject {
    //  单例全局访问点-> 目的使用ViewModel访问的用户信息数据共享
    static let sharedViewModel: HMUserAccountViewModel = HMUserAccountViewModel()
    //  构造函数私有化
    private override init() {
        super.init()
        //  代码执行到此表示对象创建成功
        //  通过解档二进制数据，给模型属性赋值
        userAccount = HMUserAccount.loadUserAccount()
    }
    
    //  用户模型
    var userAccount: HMUserAccount?
    
    //  获取accessToken
    var accessToken: String? {
        guard let token = userAccount?.access_token else {
            return nil
        }
        //  代码执行到此表示有token
        //  判断是否过期        
        if userAccount?.expiresDate?.compare(Date()) == .orderedDescending {
            //  token没有过期
            return token
        } else {
            //  token过期
            return nil
        }
        
    }
    
    //  是否登录标记
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //  获取token
    func requestAccessToken(code: String, callBack: @escaping (Bool)->()) {
        HMNetworkTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error != nil {
                print("网络请求异常: \(error!)")
                callBack(false)
                return
            }
            
            //  代码执行到此，表示数据请求成功
            let dic = response as! [String: Any]
            //  字典转模型
            let userAccount = HMUserAccount(dic: dic)
            //  获取用户信息
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
            
        }
    }
    //  获取用户信息
    func requestUserInfo(userAccount: HMUserAccount, callBack: @escaping (Bool)->()) {
        HMNetworkTools.sharedTools.requestUserInfo(token: userAccount.access_token!, uid: userAccount.uid) { (response, error) in
            if error != nil {
                print("网络请求异常: \(error!)")
                callBack(false)
                return
            }
            //  代码执行到此，表示数据请求成功
            let dic = response as! [String: Any]
            let name = dic["name"] as? String
            let avatar_large = dic["avatar_large"] as? String
            //  给模型属性赋值
            userAccount.name = name
            userAccount.avatar_large = avatar_large
            //  保存用户对象
            userAccount.saveUserAccount()
            //  记录登录的对象
            self.userAccount = userAccount
            //  代码执行到此表示登录成功
            callBack(true)
        }
    }
    

    
}
